const express = require('express')
const router = express.Router()
const User = require('../db/model/userModel') // 引入
const mailSend = require('../utils/mail')

let codes = {} // 我们这个例子 验证码就放着内存中了。正常开发也可以放redis 或者 数据库内
/**
 * @api {post} /user/reg 用户注册
 * @apiName 用户注册
 * @apiGroup User
 *
 * @apiParam {String} us 用户名
 * @apiParam {String} ps 用户密码
 * @apiParam {String} code 邮箱验证码
 *
 * @apiSuccess {String} firstname Firstname of the User.
 * @apiSuccess {String} lastname  Lastname of the User.
 */
router.post('/reg', (req, res) => {
  // 获取数据
  let { us, ps, code } = req.body // server.js中没有解析传参工具的话 会报错
  if (us && ps && code) {
    // 判断验证码是否ok
    if (!(codes[us] === Number(code))) { // 邮箱作为用户名
      return res.send({err: -4, msg: '验证码错误'})
    }
    User.find({us}).then((data) => {
      if (!data.length) {
        // 用户名不存在 可以注册
        return User.insertMany({ us: us, ps: ps}) // 注册成功 将数据写入数据库
      } else {
        res.send({err: -3, msg: '用户名已存在'})
      }
    }).then(() => {
      res.send({ err: 0, msg: '注册成功'})
    }).catch(err => {
      res.send({ err: -2, msg: '注册失败'})
    })
  } else {
    return res.send({err: -1, msg: '参数错误'})
  }
  // 数据处理
  // 返回数据
  // res.send('test ok')
})
/**
 * @api {post} /user/login 登录
 * @apiName 登录
 * @apiGroup User
 *
 * @apiParam {String} us 用户名
 * @apiParam {String} ps 用户密码
 *
 * @apiSuccess {String} firstname Firstname of the User.
 * @apiSuccess {String} lastname  Lastname of the User.
 */
router.post('/login', (req, res) => {
  console.log(req.body)
  let { us, ps } = req.body
  console.log(us, ps)
  if (us && ps) {
    // 
    User.find({ us, ps }).then((data) => {
      if (data.length > 0) {
        res.send({err: 0, msg: '登录成功'})
      } else {
        res.send({err: -2, msg: '用户名或者密码不正确'})
      }
    }).catch(err => {
      // res.send({ err: -2, msg: '注册失败'})
      return res.send({err: -1, msg: '内部错误'})
    })
  } else {
    return res.send({err: -1, msg: '参数错误'})
  }
})

// 发送邮件验证码
/**
 * @api {post} /user/login 邮箱验证码发送
 * @apiName 邮箱验证码发送
 * @apiGroup User
 *
 * @apiParam {String} mail 邮箱
 *
 * @apiSuccess {String} firstname Firstname of the User.
 * @apiSuccess {String} lastname  Lastname of the User.
 */
router.post('/getMailCode', (req, res) => {
  let { mail } = req.body
  if (mail) {
    let code = parseInt( Math.random() * 10000 ) // 随机验证码
    codes[mail] = code
    console.log(codes)
    mailSend.send(mail, code).then(() => {
      res.send({err: 0, msg: '验证码发送成功'})
    }).catch((err) => {
      res.send({err: -1, msg: '验证码发送失败'})
    })
  } else {
    res.send({err: -1, msg: '参数错误'})
  }
})

module.exports = router